/**
 * @file bsp_list.c
 * @brief 双向链表API \n
 * @warning TODO:该API未完善，推荐使用 utlist
 * @author wangh (wanghuan3037@fiberhome.com)
 * @version 1.0
 * @date 2020-09-21
 * @copyright Copyright (c) 2020  烽火通信
 ***************************************************************
 * @par 修改日志:
 * <table>
 * <tr><th>Date       <th>Version  <th>Author  <th>Description
 * <tr><td>2020-09-21 <td>1.0      <td>wangh   <td>内容
 * </table>
 */ 
#include <stdlib.h>
#include "bsp_list.h"
#if 0
linked_list *create_linked_list()
{
    linked_list *ll = (linked_list *) malloc(sizeof(linked_list *));

    ll->size = 0;
    ll->head = (linked_list_node *) malloc(sizeof(linked_list_node *));

    ll->head->data = NULL;
    ll->head->next = ll->head;
    ll->head->pre = ll->head;

    ll->iteratorP = ll->head;

    return ll;
}

linked_list *create_linked_list_by_data(void **data, int data_len)
{
    linked_list *ll = create_linked_list();

    /* 如果数据数组不为空的话，将所有的数据节点加入到链表之中 */
    if(data != NULL && data_len > 0)
    {
        int i = 0;
        for(i =  0; i < data_len; i++)
        {
            append_to_linked_list(ll, *(data + i));
        }
    }

    return ll;
}

linked_list *create_linked_list_by_list(linked_list * ll)
{
    linked_list *ll_1 = create_linked_list();

    /* 参数链表的数据不为空的话，将其全部复制到新的链表之中 */
    if(ll != NULL && ll->size > 0)
    {
        linked_list_node *dataNode = NULL;
        while((dataNode = linked_list_get_next(ll)) != NULL)
        {
            append_to_linked_list(ll_1, dataNode->data);
         }
    }

    return ll_1;
}

linked_list *append_to_linked_list(linked_list * ll, void *data)
{
    if(ll == NULL || ll->head == NULL)
    {
        return NULL;
    }
    else
    {
        linked_list_node *dataP = (linked_list_node *) malloc(sizeof(linked_list_node *));
        
        dataP->data = data;

        /* 首先将P加到最后的位置 */
        ll->head->pr->next = dataP;
        dataP->pre =d->pre;
        /* 然后整理head->pre以及dataP->next */
        ll->head->pre = dataP;
        dataP->next = ll->head;

        ll->size++;
    }

    return ll;
}

linked_list_node *linked_list_get_next(linked_list *ll)
{
    if(ll == NULL || ll->head == NULL || ll->iteratorP == NULL) /* 校验数据是否为NULL */
    {
        return NULL;
    }
    else    /* 其他情况，继续往下遍历 */
    {
        ll->iteratorP = ll->iteratorP->next;
        if(ll->iteratorP == ll->head)  /* 是否已经遍历到最后一个节点 */
        {
            return NULL;
        }
        else
        {
            return ll->iteratorP;
        }
    }
}

void delete_linked_list(linked_list * ll)
{
    if(ll != NULL)
    {
        if(ll->head != NULL)
        {
            linked_list_node *p = ll->head->next;
            linked_list_node *q = NULL;

            while(p != NULL && p != ll->head)
            {
                q = p->next;
                free(p);
                p = q;
            }
        }
        free(ll->head);
        free(ll);
     }
}
#endif

/*********** (C) COPYRIGHT 2020 FiberHome *****END OF FILE****/
